Developer Documentation

QuickTime 4 API Documentation

Inside Macintosh: Sound

| Previous | Chapter contents | Chapter top | Section top | Next |

Playing From Disk

Use the SndStartFilePlay , SndPauseFilePlay , and SndStopFilePlay functions to manage a continuous play from disk.

SndStartFilePlay

You can call the SndStartFilePlay function to initiate a play from disk.

FUNCTION SndStartFilePlay (chan: SndChannelPtr; fRefNum: Integer;
                                          resNum: Integer; bufferSize: LongInt;
                                          theBuffer: Ptr;
                                         theSelection: AudioSelectionPtr;
                                         theCompletion: ProcPtr;
                                         async: Boolean): OSErr;
chan
A pointer to a valid sound channel. You can pass NIL instead of a pointer to a sound channel if you want the Sound Manager to internally allocate a sound channel in your application's heap zone.
fRefNum
The file reference number of the AIFF or AIFF-C file to play. To play a sound resource rather than a sound file, this field should be 0.
resNum
The resource ID number of a sound resource to play. To play a sound file rather than a sound resource, this field should be 0.
bufferSize
The number of bytes of memory that the Sound Manager is to use for input buffering while reading in sound data. For SndStartFilePlay to execute successfully on the slowest Macintosh computers, use a buffer of at least 20,480 bytes. You can pass the value 0 to instruct the Sound Manager to allocate a buffer of the default size.
theBuffer
A pointer to a buffer that the Sound Manager should use for input buffering while reading in sound data. If this parameter is NIL , the Sound Manager allocates two buffers, each half the size of the value specified in the bufferSize parameter. If this parameter is not NIL , the buffer should be a nonrelocatable block of size bufferSize .
theSelection
A pointer to an audio selection record that specifies which portion of a sound should be played. You can pass NIL to specify that the Sound Manager should play the entire sound.
theCompletion
A pointer to a completion routine that the Sound Manager calls when the sound is finished playing. You can pass NIL to specify that the Sound Manager should not execute a completion routine. This field is useful only for asynchronous play.
async
A Boolean value that indicates whether the sound should be played asynchronously ( TRUE ) or synchronously ( FALSE ). You can play sound asynchronously only if you allocate your own sound channel (using SndNewChannel ). If you pass NIL in the chan parameter and TRUE for this parameter, the SndStartFilePlay function returns the badChannel result code.

DESCRIPTION

The SndStartFilePlay function begins a continuous play from disk on a sound channel. The chan parameter is a pointer to the sound channel. If chan is not NIL , it is used as a valid channel. If chan is NIL , an internally allocated sound channel is used for play from disk. This internally allocated sound channel is not passed back to you. Because SndPauseFilePlay and SndStopFilePlay require a sound-channel pointer, you must allocate your own channel if you wish to use those routines.

The sounds you wish to play can be stored either in a file or in an 'snd ' resource. If you are playing a file, then fRefNum should be the file reference number of the file to be played and the parameter resNum should be set to 0. If you are playing an 'snd ' resource, then fRefNum should be set to 0 and resNum should be the resource ID number (not the file reference number) of the resource to play.

The SndStartFilePlay function might not play 'snd ' resources from disk correctly. In particular, the function will not execute correctly if any resource in the resource file containing the 'snd ' resource you wish to play has been changed through a call to the WriteResource procedure and you have not updated the resource file using the UpdateResFile procedure. To avoid this and other problems, you should use the SndStartFilePlay function to play only sound files.

SPECIAL CONSIDERATIONS

Because the SndStartFilePlay function moves memory, you should not call it at interrupt time.

ASSEMBLY-LANGUAGE INFORMATION

The trap macro and routine selector for the SndStartFilePlay function are

Trap macro

Selector

_SoundDispatch

$0D000008

RESULT CODES

noErr

0

No error

notEnoughHardwareErr

-201

Insufficient hardware available

queueFull

-203

No room in the queue

badChannel

-205

Channel is corrupt or unusable

badFormat

-206

Resource is corrupt or unusable

notEnoughBufferSpace

-207

Insufficient memory available

badFileFormat

-208

File is corrupt or unusable, or not AIFF or AIFF-C

channelBusy

-209

Channel is busy

buffersTooSmall

-210

Buffer is too small

siInvalidCompression

-223

Invalid compression type

SEE ALSO

For an example of how to play a sound file, see the chapter "Introduction to Sound on the Macintosh" in this book.

For information on the format of a completion routine, see "Completion Routines" .

SndPauseFilePlay

You can use the SndPauseFilePlay function to toggle the state of a play from disk in progress, just as you might use the pause button on an audiocassette tape player to temporarily pause and then resume play.

FUNCTION SndPauseFilePlay (chan: SndChannelPtr): OSErr;
chan
A pointer to a valid sound channel currently processing a play from disk initiated by a call to the SndStartFilePlay function.

DESCRIPTION

The SndPauseFilePlay function suspends the play from disk on the channel specified by the chan parameter if that play from disk is not already paused; the function resumes play if the play from disk is already paused.

The SndPauseFilePlay function is used in conjunction with SndStopFilePlay to control play from disk on a sound channel. Note that this call can be made only if your application has already called SndStartFilePlay with a valid sound channel. You cannot use this function with a synchronous call to SndStartFilePlay because, in that case, program control does not return to the caller until after the sound has completely finished playing.

If the channel specified by the chan parameter is not being used for play from disk, then SndPauseFilePlay returns the result code channelNotBusy . If the channel is busy and paused, then play from disk is resumed. If the channel is busy and the channel is not paused, then play from disk is suspended.

SPECIAL CONSIDERATIONS

You can call the SndPauseFilePlay function at interrupt time.

ASSEMBLY-LANGUAGE INFORMATION

The trap macro and routine selector for the SndPauseFilePlay function are

Trap macro

Selector

_SoundDispatch

$02040008

RESULT CODES

noErr

0

No error

queueFull

-203

No room in the queue

badChannel

-205

Channel is corrupt or unusable

channelNotBusy

-211

Channel not currently used

SndStopFilePlay

You can use SndStopFilePlay to stop an asynchronous play from disk.

FUNCTION SndStopFilePlay (chan: SndChannelPtr;
                                         quietNow: Boolean): OSErr;
chan
A pointer to a valid sound channel currently processing a play from disk initiated by a call to the SndStartFilePlay function.
quietNow
A Boolean value that indicates whether the play from disk should be stopped immediately ( TRUE ) or when it completes execution ( FALSE ).

DESCRIPTION

The SndStopFilePlay function either can stop an asynchronous play from disk immediately or can take control of the CPU until a play from disk finishes. The SndStopFilePlay function does not return until all asynchronous file I/O calls have completed and any internally allocated memory has been released. If async is FALSE , then SndStopFilePlay lets the sound complete normally and returns only after the sound has completed, all asynchronous file I/O calls have completed, and any internal allocated memory has been released.

For example, you might use the function to stop the playing of a sound file if the user selects an option that turns off sound output while the file is already playing. In that case, you would pass TRUE to quietNow . Alternatively, you might have started a sound playing asynchronously so that you could perform other tasks while the sound plays. But you might then finish those other tasks and want to convert the play from disk into a synchronous play. By passing FALSE to quietNow , you effectively achieve that.

SPECIAL CONSIDERATIONS

Because the SndStopFilePlay function might move memory, you should not call it at interrupt time.

ASSEMBLY-LANGUAGE INFORMATION

The trap macro and routine selector for the SndStopFilePlay function are

Trap macro

Selector

_SoundDispatch

$03080008

RESULT CODES

noErr

0

No error

badChannel

-205

Channel is corrupt or unusable


© 1999 Apple Computer, Inc.

| Previous | Chapter contents | Chapter top | Section top | Next |